package com.aplana.ccsd.web.component;

import info.magnolia.module.blossom.annotation.TabFactory;
import info.magnolia.module.blossom.annotation.Template;
import info.magnolia.module.blossom.annotation.TemplateDescription;
import info.magnolia.module.blossom.dialog.TabBuilder;

import java.util.List;

import javax.jcr.Node;
import javax.jcr.PathNotFoundException;
import javax.jcr.RepositoryException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.ServletRequestBindingException;
import org.springframework.web.bind.annotation.RequestMapping;

import com.aplana.ccsd.model.Article;
import com.aplana.ccsd.model.pagination.PagedList;
import com.aplana.ccsd.model.pagination.Pagination;
import com.aplana.ccsd.model.pagination.Step;
import com.aplana.ccsd.service.ArticleService;
import com.aplana.ccsd.service.PaginationService;
import com.aplana.ccsd.util.JcrNodeUtils;

/**
 * Компонент отображающий меню с названиями вендоров
 */
@Controller
@Template(title = "Article list", id = "blossomCCSD:components/articleList")
@TemplateDescription("Список статей с пейджингом")
public class ArticleListComponent {

	@Autowired
	private ArticleService articalService;

	@Autowired
	private PaginationService paginationService;

	@RequestMapping("/articleList")
	public String handleRequest(ModelMap model, HttpSession session,
			HttpServletRequest request, Node node)
			throws PathNotFoundException, RepositoryException,
			ServletRequestBindingException {

		// 1 текущий шаг пейджинга
		Step currentStep = paginationService.getCurrentStep(request);
		// TODO: 2 все результаты. Тут необходимо переделать так как нужно получать не
		// все результаты а только часть передавая max и offset получая
		// результат при помощи javax.jcr.query.Query
		Node articleListPage = articalService.getArticleListPage(node);
		List<Article> allResults = articalService.findArticles(articleListPage);
		PagedList<Article> pagedResults = paginationService.createPageResults(allResults, currentStep);
		
		// 3 объект пейджинга для отрисовки 
		String articlesUrl = JcrNodeUtils.getURL(articleListPage);
		Pagination pagination = paginationService.createPagination(articlesUrl, request, currentStep, pagedResults.getTotal());

		model.put("articles", pagedResults.getResult());
		model.put("pagination", pagination);
		
		return "components/articleList.jsp";
	}

	@TabFactory("Content")
	public void contentTab(TabBuilder tab) {
		articalService.addArticleListDialogControls(tab);
	}
}
